package br.com.bestOffer.ejb.produto.entity;

import java.io.Serializable;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;

import br.com.bestOffer.ejb.anuncio.entity.Anuncio;
import br.com.bestOffer.ejb.fabricante.entity.Fabricante;
import br.com.bestOffer.enumerator.CategoriaProduto;

@Entity
@Table(name="TB05_PRODUTO")
@Inheritance(strategy = InheritanceType.JOINED)
@NamedQueries({
	@NamedQuery(name="Produto.listarTodosOsProdutos", query="Select p from Produto p"),
	@NamedQuery(name="Produto.listarProdutosPorCategoria", query="Select p from Produto p where p.categoriaProduto = :nuCategoriaProduto"),
	@NamedQuery(name="Produto.buscarProdutoPorNomeModelo", query="Select p from Produto p where p.modelo = :nomeModelo"),
	@NamedQuery(name="Produto.listarProdutoPorId", query="Select p from Produto p where p.fabricante.id = :idProduto"),
	@NamedQuery(name="Produto.buscarAnunciosProduto", query="Select p from Produto p join fetch p.listaAnuncios where p.id = :idProduto"),
	@NamedQuery(name="Produto.listarProdutoPorIdFabricante", query="Select p from Produto p where p.id = :idFabricante"),
	@NamedQuery(name="Produto.listarQuantidadeProdutoPorArquitetura", query="Select count(p) from Produto p where p.categoriaProduto = :categoria"),
	@NamedQuery(name="Produto.listarProdutosPorCategoriaePorFabricante", query="Select p from Produto p where p.categoriaProduto.id = :nuTipoProduto and p.fabricante.id = :nuFabricante")
})
public class Produto implements Serializable{

	

	public Produto() {
		super();
	}
	
	public Produto(Produto produto){
		this.id = produto.getId();
		this.modelo = produto.getModelo();
	}

	private static final long serialVersionUID = 8083743782668479256L;

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	@Column(name="Id_produto",nullable = false)
	private Integer id;

	@Column(name="modelo",unique=true,length=50,nullable=false)
	private String modelo;

	@ManyToOne
	@JoinColumn(name="FK_ID_fabricante",nullable = false)
	private Fabricante fabricante;

	@OneToMany(mappedBy = "id.produto")
	private List<Anuncio> listaAnuncios;

	@Column(name="categoria_produto",nullable=false)
	@Enumerated
	private CategoriaProduto categoriaProduto;

	@Column(length=600,nullable=false,name="descricao")
	private String descricao;

	
	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getModelo() {
		return modelo;
	}

	public void setModelo(String modelo) {
		this.modelo = modelo;
	}

	public Fabricante getFabricante() {
		return fabricante;
	}

	public void setFabricante(Fabricante fabricante) {
		this.fabricante = fabricante;
	}

	public List<Anuncio> getListaAnuncios() {
		return listaAnuncios;
	}

	public void setListaAnuncios(List<Anuncio> listaAnuncios) {
		this.listaAnuncios = listaAnuncios;
	}

	public CategoriaProduto getCategoriaProduto() {
		return categoriaProduto;
	}

	public void setCategoriaProduto(CategoriaProduto categoriaProduto) {
		this.categoriaProduto = categoriaProduto;
	}

	public String getDescricao() {
		return descricao;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	
	
	
	
	
	
}
